<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class serviceAntispamIPInterdits
{
	
	
	public static function supprimerIP()
	{
		
		global $core;
		
		if(empty($_POST['regle_id'])) {
			throw new cpErreur(__('Aucune sélection'), 'regle_id', 302);
		}
		
		$core->con->execute(
			'DELETE FROM '.$core->prefix.'regles_antispam '.
			'WHERE regle_id = '.(integer) $_POST['regle_id'].
			" AND regle_nom = 'IPInterdits' LIMIT 1"
		);

	}
	
	
	protected static function ipmask($pattern,&$ip,&$mask)
	{
		$bits = explode('/',$pattern);
		
		# Set IP
		$bits[0] .= str_repeat(".0", 3 - substr_count($bits[0], "."));
		$ip = ip2long($bits[0]);
		
		if (!$ip || $ip == -1) {
			throw new cpErreur(__('Adresse IP invalide'));
		}
		
		# Set mask
		if (!isset($bits[1])) {
			$mask = -1;
		} elseif (strpos($bits[1],'.')) {
			$mask = ip2long($bits[1]);
			if (!$mask) {
				$mask = -1;
			}
		} else {
			$mask = ~((1 << (32 - $bits[1])) - 1);
		}
	}
	
	
	protected static function getRuleCIDR($ip,$mask)
	{
		
		global $core;
		
		$strReq =
		'SELECT * FROM '.$core->prefix.'regles_antispam '.
		"WHERE regle_nom = 'IPInterdits' ".
		"AND regle_valeur LIKE '%:".(integer) $ip.":".(integer) $mask."'";
		
		return $core->con->select($strReq);
	}
	
	
	public static function ajouterIP()
	{
		
		global $core;
		
		if(empty($_POST['ip'])) {
			throw new cpErreur(__('Vous devez indiquer une adresse IP.'), 'ip', 101);
		}
		
		self::ipmask($_POST['ip'],$ip,$mask);
		
		$pattern = long2ip($ip).($mask != -1 ? '/'.long2ip($mask) : '');
		$content = $pattern.':'.$ip.':'.$mask;
		
		$old = self::getRuleCIDR($ip,$mask);
		$cur = $core->con->openCursor($core->prefix.'regles_antispam');
		
		if ($old->isEmpty())
		{
			$id = $core->con->select('SELECT MAX(regle_id) FROM '.$core->prefix.'regles_antispam')->f(0) + 1;
			
			$cur->regle_id = (integer) $id;
			$cur->regle_nom = 'IPInterdits';
			$cur->regle_valeur = (string) $content;
			
			$cur->insert();
		}
		else {
			throw new cpErreur(__('Cette adresse IP est déjà dans la liste.'), 'ip', 102);
		}

		return array(
			'erreur' 	=> 0,
			'regle_id'	=> $cur->regle_id,
			'pattern'	=> $pattern
		);
		
	}
	
}

?>